週刊Automatineマガジン 5. jsonとかデータからAutoを作る
概要
Automatineでは、GUIからいろいろ調整したTimelineとかをコードの形で出力することができる。
でもこれだと、変更を加えるたびにいちいちコンパイルしないといけない、、オラそんなのいやだ、、、
というわけで、AutomatineをGUIで弄る -> jsonデータを吐く -> jsonデータを実行時に読み込む -> 実行 ということができる。
すでにリリースしちゃったゲームの調整すらできるというわけさ。
データ出力手順
GUIの一番右上の「Export As Data」ボタンを押す。
すると、すべてのAutoのデータがjsonとして
Assets/Automatine/Runtime/Generated/Json フォルダに出力される。
拡張子は.jsonになっているため、Assetsフォルダの下だけれど、Unityの影響は受けない。
これらをサーバなどに置いて、動的にDLしてAutoとして使用することができる。
使用方法
次のようなAutoを使うコードがあったら、
Auto<int, int> auto = new Atk_Punch<int, int>(frame, 100);
次のように書き換えることができる。
var atk_punchJson = //通信結果やファイル読み出しなどで得たAtk_Punch.jsonの中身
var atk_punchData = AutomatineJsonConverter.JsonToAutoData(atk_punchJson);
Auto<int, int> auto = Auto<int, int>.RuntimeAutoGenerator(atk_punchData)(frame, 100);
これで、Atk_Punch.jsonに入っているAutoの情報を、特定の内容のAutoとして初期化することができる。
初期化コストは無視できるくらい小さい。
(クラスとして持っている場合と負荷を比較したら、もちろんjsonからの変形のほうが負荷が大きいとは思うけれど。)
制約
この機能によって、jsonを介して、動的にAutoを生成することができる。 いちいちコンパイルし直さないでも、どこかから最新のAutoの情報を取得して~っていうのが、実機でできたりする。
素敵。
ただし制約がある。
なんのことはない、「すでに動いているゲームに対して、動的にコードを追加することはできない」ことに起因する制約がある。
1.ConditionType, ConditionValueを動的に増やすことはできない
2.Coroutineを動的に増やすことはできない
3.Changerを動的に増やすことはできない
Autoの中にあるTackを移動したり、TackにセットしてあるConditionやCoroutineを切り替えたり、タイミングや長さ、Timelineの数などを変更することは自由自在にできる。
ただし、使用される対象であるCoroutineやChanger、ConditionType、ConditionValueについては、これらはデータではなくコードなので、動的に追加することはできない。
これらはコンパイル時に「あらかじめ」いれておこうね、っていう話になる。
まーーーUnityそれ自体の制約でもあるし、iOSとかのプラットフォームの制約でもあるし。